package main

import (
	"fmt"
	"sort"
	"strconv"
)

// 常量

const INT_MAX = (1 << 31) - 1
const INT_MIN = -(1 << 31)

// 求最大值
func max(a int, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

// 求最小值
func min(a int, b int) int {
	if a > b {
		return b
	} else {
		return a
	}
}

// 求绝对值
func abs(a int) int {
	if a < 0 { a = -a }
	return a
}

// 两个数组较小的一个
func min_vec(a []int, b []int) []int {
	for i := 0; i < len(a) || i < len(b); i++ {
		if i >= len(a) { return a }
		if i >= len(b) { return b }
		if a[i] < b[i] {
			return a
		} else if a[i] > b[i] {
			return b
		}
	}
	return a  // 说明 a == b, 随便返回一个即可
}

// 翻转 nums[i...j]的部分
func reverse(nums *[]int, i int, j int) {

	for i < j {
		(*nums)[i], (*nums)[j] = (*nums)[j], (*nums)[i]
		i, j = i + 1, j - 1
	}
}

// 交换nums[i]和nums[j]
func swap(nums *[]int, i int, j int) {
	(*nums)[i], (*nums)[j] = (*nums)[j], (*nums)[i]
}

// 字符串排序，返回排序后的字符串
/****************************************/
type sortRunes []rune

func (s sortRunes) Len() int {
	return len(s)
}

func (s sortRunes) Less(i, j int) bool {
	return s[i] < s[j]
}

func (s sortRunes) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}

func sort_string(s string) string {

	t := []rune(s)
	sort.Sort(sortRunes(t))

	return string(t)
}
/****************************************/

// 翻转字符串，返回翻转后的结果
func reverse_string(s string) string {
	runes := []rune(s)

	for from, to := 0, len(runes)-1; from < to; from, to = from + 1, to - 1 {
		runes[from], runes[to] = runes[to], runes[from]
	}

	return string(runes)
}

// stoi
func stoi(s string) int {
	res, _ := strconv.Atoi(s)
	return res
}

// to_string
func to_string(val int) string {
	return strconv.Itoa(val)
}

// 自己实现的pair
/****************************************/

type Pair struct {
	x int
	y int
}

func pair(x int, y int) Pair {
	return Pair{x: x, y: y}
}
/****************************************/



func main() {
	fmt.Println("Hello World!")
}
